Copy Protection License Model

Developing Applications Using The SoftwareShield System > Creating Licensing Solutions > Available License Models > > Copy Protection License Model

## Copy Protection License Model

This model allows you to lock a license tightly to an individual machine based on its FingerPrint.

Note that the copy-protection that SoftwareShield provides is a "Machine Locked" type of enforcement. If you are unsure what this means, please review Introduction To The SoftwareShield Licensing And Copy Protection System. For more detailed information about the Copy-Protection feature itself, please see Copy Protection in the Feature Guide.

Note that if you choose not to use Copy-Protection (which implicitly uses FingerPrinting), you can still get the benefit of FingerPrinting your Activation Codes. FingerPrinting Activation Codes ensures that the code will only wok on the exact machine for which it is intended.

### Overview - How to Integrate the Copy-Protection License Model Into Your Application

1. The first step is simply defining a license that is copy-protected. This is a simple check-box in your project properties inside the License Manager Application. Once you have set this, you can select what System FingerPrint options you wish to use. Generally, more options means that the fingerprint is more restrictive and more secure. Please make sure you read the section on Deploying Licensed Software when deciding what level of copy-protection you need. Please see License Behaviour Tab for detailed information about setting copy protection in your license project.

2. The next step is to ensure that your license has a copy-protection release definition built into it. This is a simple step because the SoftwareShield License Manager will not let you compile a copy-protected license unless you also define an Authorization Definition to release it. Please see Authorization Definitions Tab for detailed information on how to define a copy protection release definition for your license.

3. Once you are satisfied with your license, compile a distributed copy of it. The distributed copy is encrypted and compressed and only contains absolutely necessary information for the enforcement of your license. Place a copy of this distributed license in your applications directory. If you have decided to use steganographic alias files, make sure that they are also in the application directory. Have a look at the programming notes file that the SoftwareShield License Manager creates for your specific license. This will make your programming a little easier by supplying you with the code you will need to invoke the start up event. Please see Deploying the License for Your Application for more detailed information about deploying your license.

4. Next, in your programs startup event (main form load etc.) create an instance of the ClientProtector object and immediately call its StartUp function. You will have to pass specific parameters such as the license name, main license file password, and the finger print options code - but this code will have been already written for your convenience when you compiled your license - just look in the programming notes file created by the SoftwareShield License Manager. Have a look at the exact details of the StartUp function for more information on making this call.

5. Next, in your program code, you can define an event handler for the OnAttemptReleaseCP COM event that will be fired from the ClientProtector server. This is where you will define a UI for the user to interact with the ClientProtector and enter an Activation Code to release the copy protection. Alternatively, you can activate the license (releasing the Copy Protection for this machine) using CheckPoint Central Server Controlled Licensing.

6. Now, depending on the return value from the ClientProtector StartUp call (in the return_code reference parameter), you can launch the program or not. Put simply, the ClientProtector will tell you if your program has been authorized to run on this specific machine or not. Its as easy as that. For information on how to interpret the return_code parameter, have a look at RETURNCODES.